import ast
import logging
from 程序核心代码.mvvm重构.基础定义.基础图形项.节点图形项.带容器带组件带布局的节点图形项 import 带容器带组件带布局的节点图形项
from 程序核心代码.mvvm重构.基础定义.基础模型.容器类节点基础模型 import 容器类Ast模型基础模型
from 程序核心代码.mvvm重构.基础定义.节点管理器.自动节点注册表 import 注册节点模型, 节点模型匹配器, 注册节点图形项

logging.basicConfig(level=logging.WARNING, format='%(asctime)s - %(levelname)s - %(message)s')
日志记录器 = logging.getLogger(__name__)

@注册节点模型(ast.ClassDef)
class 类定义节点模型(容器类Ast模型基础模型):
    """
    类定义节点模型，用于表示Python中的类定义
    包含类名、父类列表、类体和装饰器（如果有）
    """
    def __init__(self, ast节点, 所属节点模型管理器, 上级节点=None, 节点位置=None):
        super().__init__(ast节点, 所属节点模型管理器, f"类: {ast节点.name}", 节点位置=节点位置, 上级节点=上级节点)

        # 设置日志级别
        if self.调试模式:
            日志记录器.setLevel(logging.DEBUG)
            日志记录器.debug(f"{self.__class__.__name__}调试模式已开启")
        else:
            日志记录器.setLevel(logging.ERROR)

        # 处理类的继承
        self.处理类继承()

        # 处理类的装饰器
        self.处理装饰器()

        # 创建类实例化接口
        self.添加接口到节点("执行流", "输入", 接口名称="类实例化入口")
        self.添加接口到节点("执行流", "输出", 接口名称="类实例化完成")

        # 创建类定义数据流接口
        self.添加接口到节点("数据流", "输出", 接口名称="类对象", 必须连接=True)

    def 处理类继承(self):
        """处理类的继承关系"""
        for 索引, 基类 in enumerate(self._ast节点.bases):
            基类节点 = 节点模型匹配器(基类, self.所属节点模型管理器)
            if 基类节点:
                起始接口 = 基类节点.添加接口到节点("数据流", "输出", 接口名称=f"父类_{索引}", 必须连接=True)
                结束接口 = self.添加接口到节点("数据流", "输入", 接口名称=f"继承_{索引}", 必须连接=True)
                起始接口.接口创建连接线模型(结束接口, self)

        # 处理关键字参数形式的父类（如metaclass=type）
        for 索引, 关键字 in enumerate(self._ast节点.keywords):
            关键字节点 = 节点模型匹配器(关键字.value, self.所属节点模型管理器)
            if 关键字节点:
                起始接口 = 关键字节点.添加接口到节点("数据流", "输出", 接口名称=f"{关键字.arg}_{索引}", 必须连接=True)
                结束接口 = self.添加接口到节点("数据流", "输入", 接口名称=f"{关键字.arg}_{索引}", 必须连接=True)
                起始接口.接口创建连接线模型(结束接口, self)

    def 处理装饰器(self):
        """处理类的装饰器"""
        for 索引, 装饰器 in enumerate(self._ast节点.decorator_list):
            装饰器节点 = 节点模型匹配器(装饰器, self.所属节点模型管理器)
            if 装饰器节点:
                起始接口 = 装饰器节点.添加接口到节点("数据流", "输出", 接口名称=f"装饰器_{索引}", 必须连接=True)
                结束接口 = self.添加接口到节点("数据流", "输入", 接口名称=f"装饰器_{索引}", 必须连接=True)
                起始接口.接口创建连接线模型(结束接口, self)

@注册节点图形项(ast.ClassDef)
class 类定义图形节点(带容器带组件带布局的节点图形项):
    """
    类定义的图形表示，显示类名、继承关系和类体
    """
    def __init__(self, 节点模型, 父容器节点图形项管理器, 父项=None):
        super().__init__(节点模型, 父容器节点图形项管理器, 父项)